﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp4
{
    class Program
    {
        static List<Student> list = new List<Student>();
        static Hashtable ht = new Hashtable();

        static void Main(string[] args)
        {
       // 添加3个类，分别实现 IComparer<T>接口，实现对Student类的三个字段的排序。
       //1、学生类：学号、姓名、年龄
       //2、请选择：1、添加学生信息。2、删除学生信息 2、查询学生信息。
       //3、重复的学号不能添加。
       //4、查询学生信息功能中有：1、查询所有（按学号排序）
       //3、查询所有（按姓名排序），2、查询所有（按年龄排序）4、按学号查询（查没有，则打印查无此学生）5、退出


            Text1();
        }

        private static void Text1()
        {
            while (true)
            {
                Console.WriteLine("请选择：1、添加学生信息。2、删除学生信息 3、查询学生信息");
                int key = int.Parse(Console.ReadLine());
                switch (key)
                {
                    case 1:
                        AddStudent();
                        break;
                    case 2:
                        DeleteStudent();
                        break;
                    case 3:
                        SelectStudent();
                        break;
                    default:
                        break;
                }

            }

        }

        private static void SelectStudent()
        {
        // 1、查询所有（按学号排序）2、查询所有（按年龄排序）
        //3、查询所有（按姓名排序），4、按学号查询（查没有，则打印查无此学生）5、退出

            while (true)
            {
       Console.WriteLine("1、查询所有（按学号排序）2、查询所有（按年龄排序）");
       Console.WriteLine("3、查询所有（按姓名排序），4、按学号查询（查没有，则打印查无此学生）5、退出");
                int key = int.Parse(Console.ReadLine());
                switch (key)
                {
                    case 1:
                        list.Sort(new NumShort());
                        foreach (var item in list)
                        {
                            Console.WriteLine(item);
                        }
                        SelectStudent();
                        break;
                    case 2:
                        list.Sort(new AgeShort());
                        foreach (var item in list)
                        {
                            Console.WriteLine(item);
                        }
                        SelectStudent();
                        break;
                    case 3:
                        list.Sort(new NameShort());
                        foreach (var item in list)
                        {
                            Console.WriteLine(item);
                        }
                        SelectStudent();
                        break;
                    case 4:
                        Console.WriteLine("请输入查询的学号");
                        int num = int.Parse(Console.ReadLine());
                        if (ht.Contains(num))
                        {
                            Console.WriteLine(ht[num]);
                            SelectStudent();
                        }
                        else
                        {
                            Console.WriteLine("查无此学生！！");
                            SelectStudent();
                        }
                        break;
                    case 5:
                        Environment.Exit(0);
                        break;

                    default:
                        break;
                }
            }
        
        
        }

        private static void DeleteStudent()
        {
            Console.WriteLine("请输入要删除学生的学号");
            int num = int.Parse(Console.ReadLine());
            if (ht.Contains(num))
            {
                list.Remove((Student)ht[num]);
                ht.Remove(num);
                Console.WriteLine("删除成功！");
                Text1();
            }
            else
            {
                Console.WriteLine("查无此学生！！");
                DeleteStudent();
            }

        }

        private static void AddStudent()
        {
            Console.WriteLine("请输入学号");
            int num = int.Parse(Console.ReadLine());
            Console.WriteLine("请输入姓名");
            string name = Console.ReadLine();
            Console.WriteLine("请输入年龄");
            int age = int.Parse(Console.ReadLine());
            Student stu = new Student(num,name,age);
            if (ht.Contains(num))
            {
                Console.WriteLine("该学生已存在");
                AddStudent();
            }
            else
            {
                list.Add(stu);
                ht.Add(stu._Num,stu);
            }
            Text1();

        }
    }
    class Student :IComparer<Student>
    {
        public int _Num;
        public string _Name;
        public int _Age;

        public Student(int num, string name, int _age)
        {
            _Num = num;
            _Name = name;
            _Age = _age;
        }
        public Student() { }

        //实现接口
        public int Compare(Student x, Student y)
        {
            throw new NotImplementedException();
        }

        public override string ToString()
        {
            return $"学号:{_Num} 姓名:{_Name} 年龄:{_Age}";
        }
    }
    class NumShort : IComparer<Student>
    {
        public int Compare(Student x, Student y)
        {
            return x._Num.CompareTo(y._Num);
        }
    }
    class NameShort : IComparer<Student>
    {
        public int Compare(Student x, Student y)
        {
            return x._Name.CompareTo(y._Name);
        }
    }
    class AgeShort : IComparer<Student>
    {
        public int Compare(Student x, Student y)
        {
            return x._Age.CompareTo(y._Age);
        }
    }
}
